// cManagerCasillas

// private var m_vListaCasillasPropiedades:Array					->		lista de las casillas del juego para comprar
// private var m_myJuego:cJuego										->		referencia a la singleton juego


// public function cManagerCasillas(_j:cJuego)   					-> 		constructor
// private function Init()						 					->  	inicio de clase
// public function Load(_fileXML:String):void  	 					->  	carga el archivo xml
// public function LoadComplete(_myXML:XML,_isLast:Boolean):void	->		aviso cuando se acaba de leer el archivo xml
// public function GeneraCasillas(_myXML:XML):Boolean				->		a partir del xml almacena en memoria las casillas con la info correspondiente
// public function GetVectorCasillas():Array						->		devuelve las casillas del juego
// public function GetCasillaByName(_n:String):cCasilla				->		obtiene una casilla en concreto por nombre


package game.casillas 
{
	import game.juego.cJuego;
	import game.IXMLLoadable;
	import game.Main;
	import utils.LoadFiles;
	/**
	 * ...
	 * @author miquel
	 */
	public class cManagerCasillas implements IXMLLoadable
	{
		private var m_vListaCasillasPropiedades:Array 	= null;
		private var m_myJuego:cJuego					= null;
		
		public function cManagerCasillas(_j:cJuego) 
		{
			m_myJuego = _j;
			Init();
		}

		private function Init():void
		{
			m_vListaCasillasPropiedades = new Array();
		}
		
		/**
		 * Load: Ordena obtener los datos del xml del tablero 
		 * @param	_fileXML
		 */
		public function Load(_fileXML:String):void
		{
			if(Main.DEBUG_LOAD_FILES) trace("Load.xml " + _fileXML + " this " + this);
			LoadFiles.CargaArchivoXML(_fileXML, this);
			trace("cManagerCasillas.as::Load:CARGANDO...:");
		}
		
		
		/**
		 * LoadComplete: recibe este mensaje cuando se ha cargado el xml y lo utiliza para crear el array de tablero
		 * @param	_myXML
		 */
		public function LoadComplete(_myXML:XML,_isLast:Boolean):void
		{
			if (Main.DEBUG_LOAD_FILES) trace("cManagerCasillas.as::LoadComplete::" + _myXML);
			
			//GeneraTablero(_myXML);
			GeneraCasillas(_myXML);
			
			if (_isLast)
			{
				trace("cManagerCasillas.as::LoadComplete:YA PODEMOS JUGAR!:");
				m_myJuego.PreparacionJuego();
			}
		}

		public function GeneraCasillas(_myXML:XML):Boolean
		{
			if (_myXML != null)
			{
				//composicion de jugadores del juego
				for each(var l_casilla:XML in _myXML.children())
				{
					trace("cManagerCasillas.as::GeneraCasillas::" + l_casilla.@valor + ":" + l_casilla.@color + ":" + l_casilla.@precio);
					
					var l_pCasilla:cCasilla = new cCasilla();
					
					if (l_pCasilla != null)
					{
						l_pCasilla.SetNombre(l_casilla.@valor);
						l_pCasilla.m_sColor = l_casilla.@color;
						l_pCasilla.SetGrupo(l_casilla.@grupo);
						l_pCasilla.m_uiPrecio = l_casilla.@precio;
						l_pCasilla.SetPropietario(0xFF);
						l_pCasilla.m_uiNumTorres = 0;

						if (m_vListaCasillasPropiedades != null)
						{
							var l_iLenghtVector:uint = m_vListaCasillasPropiedades.push(l_pCasilla);
							trace("cManagerCasillas.as::GeneraCasillas:Añadido:" + l_pCasilla.GetNombre() + " en el vector de casillas del manager de casillas. Total=" + l_iLenghtVector);
						}
						else
						{
							trace("cManagerCasillas.as::GeneraCasillas:Problema añadiendo casilla:" );
							return false;
						}

					}
					else
					{
						trace("cManagerCasillas.as::GeneraCasillas:Error! No se ha podido crear la casilla:" );
						return false;
					}
				}
				return true;
			}
			else
			{
			
				return false;
			}
		}
		
		
		public function GetVectorCasillas():Array
		{
			return m_vListaCasillasPropiedades;
		}
		
		
		public function GetCasillaByName(_n:String):cCasilla
		{
			//añade el nombre al inicio de la lista
			//m_vListaCasillasPropiedades.unshift(_n);
			//m_vListaCasillasPropiedades.some();
			
			for (var name:String in m_vListaCasillasPropiedades) 
			{
				if (cCasilla(m_vListaCasillasPropiedades[name]).GetNombre() == _n)
				{
					//trace("cManagerCasillas.as::GetCasillaByName::" + name + "::" + cCasilla(m_vListaCasillasPropiedades[name]).GetNombre());
					return cCasilla(m_vListaCasillasPropiedades[name]);
				}
			}

			return null;
		}
	}

}